/**
 * @file maximum_custom_tiling.h
 *
 * Copyright (C) 2025. Huawei Technologies Co. Ltd. All rights reserved.
 *
 * This program is distributed in the hope that it will be useful
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */
#ifndef SYNCBNTRAININGUPDATE_CUSTOM_TILING_H
#define SYNCBNTRAININGUPDATE_CUSTOM_TILING_H
#include <cstdint>

struct SyncBNTrainingUpdateCustomTilingData {
    // 基础参数
    uint32_t totalLength;    // 总数据长度
    uint32_t tileNum;        // 分块数量
    uint32_t tileLength;     // 每块长度（最后一个块可能不同）
    uint32_t lasttileLength; // 最后一块长度
    float momentum;          // 动量参数
    float epsilon;           // 防止除零的小常数
    
    // 多核处理参数
    uint32_t blockLength;    // 每个核处理的数据长度
    uint32_t isEvenCore;     // 是否均匀分核 (1-是，0-否)
    
    // 非均匀分核时的参数
    uint32_t formerNum;      // 前部核数量
    uint32_t formerLength;   // 前部核处理的数据长度
    uint32_t formerTileNum;  // 前部核的分块数量
    uint32_t formerTileLength;  // 前部核的每块长度
    uint32_t formerLastTileLength;  // 前部核的最后一块长度
    
    uint32_t tailNum;        // 尾部核数量
    uint32_t tailLength;     // 尾部核处理的数据长度
    uint32_t tailTileNum;    // 尾部核的分块数量
    uint32_t tailTileLength; // 尾部核的每块长度
    uint32_t tailLastTileLength;  // 尾部核的最后一块长度
};
#endif